/**
 * 1. new的过程发生了什么
 * 创建一个新的对象
 * 对象的__proto__指向构造函数
 * 构造函数this指向新对象
 * 返回新对象
 */

// 不考虑构造函数return的情况
function myNew(constructor, ...rest) {
    // instance.__proto__ = constructor.prototype
    const instance = Object.create(constructor.prototype)

    // 执行构造函数，构造函数的this指向新实例，挂在属性等
    constructor.apply(instance, rest)
    
    return instance
}